package org.jw.testemunhopublico.repository.entities;

import java.io.Serializable;
import java.util.Date;
import java.util.List;

import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.NamedQuery;
import javax.persistence.OneToMany;
import javax.persistence.Table;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;

/**
 * The persistent class for the tb_tp_turno database table.
 * 
 */
@Entity
@Table(name="tb_tp_turno")
@NamedQuery(name="Turno.findAll", query="SELECT t FROM Turno t")
public class Turno implements Serializable {
	private static final long serialVersionUID = 1L;

	@Id
	@GeneratedValue(strategy=GenerationType.AUTO)
	@Column(name="id_turno")
	private int idTurno;

	@Temporal(TemporalType.DATE)
	@Column(name="dt_data")
	private Date data;

	//bi-directional many-to-one association to Experiencia
	@OneToMany(mappedBy="turno", cascade={CascadeType.ALL})
	private List<Experiencia> experiencias;

//	//bi-directional many-to-one association to PublicadorTurno
//	@OneToMany(mappedBy="turno")
//	private List<PublicadorTurno> publicadoresTurnos;

	//bi-directional many-to-one association to Relatorio
	@OneToMany(mappedBy="turno")
	private List<Relatorio> relatorios;

	//uni-directional many-to-one association to Horario
	@ManyToOne(cascade={CascadeType.ALL})
	@JoinColumn(name="fk_horario")
	private Horario horario;

	//uni-directional many-to-one association to LocalTestemunho
	@ManyToOne
	@JoinColumn(name="fk_local")
	private LocalTestemunho local;

	public Turno() {
	}

	public int getIdTurno() {
		return this.idTurno;
	}

	public void setIdTurno(int idTurno) {
		this.idTurno = idTurno;
	}

	public Date getData() {
		return this.data;
	}

	public void setData(Date data) {
		this.data = data;
	}

	public List<Experiencia> getExperiencias() {
		return this.experiencias;
	}

	public void setExperiencias(List<Experiencia> experiencias) {
		this.experiencias = experiencias;
	}

	public Experiencia addExperiencia(Experiencia experiencia) {
		getExperiencias().add(experiencia);
		experiencia.setTurno(this);

		return experiencia;
	}

	public Experiencia removeExperiencia(Experiencia experiencia) {
		getExperiencias().remove(experiencia);
		experiencia.setTurno(null);

		return experiencia;
	}

//	public List<PublicadorTurno> getPublicadoresTurnos() {
//		return this.publicadoresTurnos;
//	}
//
//	public void setPublicadoresTurnos(List<PublicadorTurno> publicadoresTurnos) {
//		this.publicadoresTurnos = publicadoresTurnos;
//	}

//	public PublicadorTurno addPublicadoresTurno(PublicadorTurno publicadoresTurno) {
//		getPublicadoresTurnos().add(publicadoresTurno);
//		publicadoresTurno.setTurno(this);
//
//		return publicadoresTurno;
//	}

//	public PublicadorTurno removePublicadoresTurno(PublicadorTurno publicadoresTurno) {
//		getPublicadoresTurnos().remove(publicadoresTurno);
//		publicadoresTurno.setTurno(null);
//
//		return publicadoresTurno;
//	}

	public List<Relatorio> getRelatorios() {
		return this.relatorios;
	}

	public void setRelatorios(List<Relatorio> relatorios) {
		this.relatorios = relatorios;
	}

	public Relatorio addRelatorio(Relatorio relatorio) {
		getRelatorios().add(relatorio);
		relatorio.setTurno(this);

		return relatorio;
	}

	public Relatorio removeRelatorio(Relatorio relatorio) {
		getRelatorios().remove(relatorio);
		relatorio.setTurno(null);

		return relatorio;
	}

	public Horario getHorario() {
		return this.horario;
	}

	public void setHorario(Horario horario) {
		this.horario = horario;
	}

	public LocalTestemunho getLocal() {
		return this.local;
	}

	public void setLocal(LocalTestemunho local) {
		this.local = local;
	}

//	public int getNumeroDesignados() {
//		int c = 0;
//		for (PublicadorTurno publicadorTurno : publicadoresTurnos)
//			if (publicadorTurno.getDesignado())
//				c++;
//		return c;
//	}
	
	@Override
	public String toString() {
		StringBuilder builder = new StringBuilder();
		builder.append("ID: " + idTurno + "\n");
		builder.append("LOCAL: " + local + "\n");
		builder.append("DATA: " + data + "\n");
		builder.append("HORÁRIO: " + horario + "\n");

//		builder.append("PUBLICADORES: \n");
//		if (publicadoresTurnos != null && publicadoresTurnos.size() > 0)
//			for (PublicadorTurno publicadorTurno : publicadoresTurnos) {
//				builder.append("\t" + publicadorTurno.getPublicador());
//				if (publicadorTurno.getDesignado())
//					builder.append(" [CONFIRMADO]");
//				builder.append("\n");
//			}

		builder.append("RELATÓRIO: \n");
		if (relatorios != null && relatorios.size() > 0)
			for (Relatorio relatorio : relatorios)
				builder.append("\t" + relatorio.toString() + "\n");

		return builder.toString();
	}

}